package main

import (
	"fmt"
	"unicode"
)

func main() {
	var passwd string
	fmt.Print("请输入用户密码:")
	fmt.Scan(&passwd)
	fmt.Printf("你的评分等级为:%d", pwdTest(passwd))
}

func pwdTest(passwd string) int {
	//验证密码长度是否超过8位
	score := 2
	if len(passwd) > 8 {
		score += 1
	} else {
		fmt.Println("你的密码长度小于8")
	}

	//验证密码字符中是否含三种及以上不同字符类型
	sum := 0
	var arr [4]int
	for _, j := range passwd {
		if unicode.IsUpper(j){    //判断是否为大写字母
			arr[0] = 1
		} else if unicode.IsLower(j){   //判断是否为小写字母
			arr[1] = 1
		} else if unicode.IsDigit(j){   //判断是否为数字
			arr[2] = 1
		} else if !unicode.IsDigit(j) && !unicode.IsLetter(j){   //判断是否为其他符号
			arr[3] = 1
		}
	}
	for _, v := range arr {
		sum += v
	}
	if sum >= 3 {
		score += 1
	} else {
		fmt.Println("你的密码没有由3种以上字符组成")
	}

	//判断是否有长度超过或等于3的子串重复
    n := len(passwd)
	score += 1 //提前加1
	for i := 0; i < n-5; i++ {
		num := passwd[i : i+3]
		for j := i + 3; j < n-2; j++ {
			if passwd[j:j+3] == num {
				score -= 1   //若长度超过3的子串重复则减1
				fmt.Println("你的密码有长度超过或等于3的子串重复")
				goto jump
			}
		}
	}
    jump:
	return score
}
